#!/bin/bash

################################################################################
# MinIO 内网 DNS 优化脚本 (Split DNS)
# 功能: 在所有节点上配置 /etc/hosts，强制域名解析为内网 IP
# 解决: 解决 Hairpin NAT 问题，让内网流量直连，不走公网网关
# 使用: ./setup-hosts.sh
################################################################################

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 节点列表
NODES=("minio1" "minio2" "minio3" "minio4")

# 配置参数
NGINX_IP="10.1.1.103"
DOMAIN_API="bigdata.data.jichuangmao.com"
DOMAIN_CONSOLE="bigdata-ui.data.jichuangmao.com"
HOSTS_ENTRY="${NGINX_IP} ${DOMAIN_API} ${DOMAIN_CONSOLE}"

echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}MinIO 内网 DNS 优化脚本${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
echo -e "${YELLOW}目标:${NC} 将 ${DOMAIN_API} 和 ${DOMAIN_CONSOLE} 解析为 ${NGINX_IP}"
echo -e "${YELLOW}原理:${NC} 通过修改 /etc/hosts 避免流量绕行公网网关"
echo ""

# 函数: 更新单个节点的 hosts
update_hosts() {
    local node=$1
    
    echo -ne "正在更新 ${node}... "
    
    # 检查是否已经存在配置
    if ssh ${node} "grep -q '${DOMAIN_API}' /etc/hosts"; then
        # 如果存在，先删除旧配置（防止重复或冲突）
        ssh ${node} "sudo sed -i '/${DOMAIN_API}/d' /etc/hosts"
        ssh ${node} "sudo sed -i '/${DOMAIN_CONSOLE}/d' /etc/hosts"
    fi
    
    # 添加新配置
    if ssh ${node} "echo '${HOSTS_ENTRY}' | sudo tee -a /etc/hosts > /dev/null"; then
        echo -e "${GREEN}✓ 成功${NC}"
        return 0
    else
        echo -e "${RED}❌ 失败 (请检查 sudo 权限)${NC}"
        return 1
    fi
}

# 验证 DNS 解析
verify_dns() {
    local node=$1
    
    echo -ne "验证 ${node} 解析... "
    
    # 使用 getent hosts 或 ping 测试解析结果
    local ip=$(ssh ${node} "getent hosts ${DOMAIN_API} | awk '{print \$1}'")
    
    if [ "$ip" == "$NGINX_IP" ]; then
        echo -e "${GREEN}✓ 正确 (${ip})${NC}"
        return 0
    else
        echo -e "${RED}❌ 错误 (解析为: ${ip:-未知})${NC}"
        return 1
    fi
}

# 主流程
SUCCESS_COUNT=0

for node in "${NODES[@]}"; do
    if update_hosts ${node}; then
        if verify_dns ${node}; then
            ((SUCCESS_COUNT++))
        fi
    fi
    echo ""
done

echo -e "${BLUE}========================================${NC}"
echo -e "更新完成: ${GREEN}${SUCCESS_COUNT}/${#NODES[@]}${NC} 个节点"
echo ""

if [ ${SUCCESS_COUNT} -eq ${#NODES[@]} ]; then
    echo -e "${GREEN}✅ 所有节点 DNS 配置优化完成！${NC}"
    echo -e "${YELLOW}提示: 请记得重启 MinIO 服务以确保所有连接都使用新解析${NC}"
    echo -e "运行: ./minio-cluster-control.sh restart"
else
    echo -e "${RED}❌ 部分节点更新失败，请检查日志${NC}"
fi
